Reliability of storage systems such as NAND flash memories may decline as higher storage density is achieved with multi-level cell (MLC)/triple-level cell (TLC) technology. Error correcting codes (ECC) can be used in storage systems to detect and/or correct errors in the data and increase performance and efficiency of these systems. Several classes of ECC codes exist in the art, such as low density parity check codes (LDPC), turbo product codes (TPC) and the like. There is a need in the art to decrease hardware complexity and power consumption of decoders corresponding to these codes.